package algorithmTopics.string;

public class test6 {

    public static void main(String[] args) {
        test6 test2 = new test6();
        System.out.println(test2.myAtoi("-18446744073709551617"));
    }

    public int myAtoi(String str) {
        str = str.trim();
        //去掉前后的空格
        //如果为空，直接返回0
        if (str.length() == 0) {

            return 0;
        }
        int index = 0;
        //遍历字符串中字符的位置
        int res = 0;
        //最终结果
        int sign = 1;
        //符号，1是正数，-1是负数，默认为正数
        int length = str.length();
        //判断符号
        if (str.charAt(index) == '-' || str.charAt(index) == '+') {
            sign = str.charAt(index++) == '+' ? 1 : -1;
        }
        for (; index < length; ++index) {
            //取出字符串中字符，然后转化为数字
            int digit = str.charAt(index) - '0';
            //按照题中的要求，读入下一个字符，直到到达下一个非数字字符或到达输入的结尾。
            //字符串的其余部分将被忽略。如果读取了非数字，后面的都要忽略
            if (digit < 0 || digit > 9) {

                break;
            }
            //越界处理
            if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && digit > Integer.MAX_VALUE % 10)) {
                return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            } else {
                res = res * 10 + digit;
            }
        }
        return sign * res;
    }

   /* public int myAtoi(String s) {
        BigInteger res = new BigInteger("0");
        BigInteger ten = new BigInteger("10");
        BigInteger temp = new BigInteger("10");
        s = s.trim();
        if (s.length() == 0) {
            return 0;
        }
        //判断是不是正数
        boolean flag = true;
        if (s.charAt(0) == '-') {
            flag = false;
            s = s.replaceFirst("^-", "0");
        } else if (Character.isDigit(s.charAt(0)) || s.charAt(0) == '+') {
            flag = true;
            s = s.replaceFirst("^\\+", "0");
        } else {
            return 0;
        }
        for (int i = 0; i < s.length() ; i++) {
            if (!Character.isDigit(s.charAt(i))) {
                break;
            }
            temp = new BigInteger(String.valueOf(s.charAt(i) - '0'));
            res = temp.add(res.multiply(ten)) ;
        }

        if (flag) {
            return res.compareTo(BigInteger.valueOf(Integer.MAX_VALUE)) < 0  ? res.intValue() : Integer.MAX_VALUE;
        } else {
            return res.compareTo(BigInteger.valueOf(Integer.MIN_VALUE)) < 0 ?  -res.intValue() :Integer.MIN_VALUE;
        }
    }*/
}
